// 编译需要加-no-pie选项
.globl main

.section .rodata
.LC0:
	.string "c1 = %d, c2 = %d\n"

.section .text
main:
	pushq %rbp
	movq %rsp, %rbp

	subq $16, %rsp
	// char c1 = -1
	movb $-1, -1(%rbp)
	// unsigned char c2 = -1
	movb $-1, -2(%rbp)
	// 以上两行可以看出不论signed和unsigned，汇编赋值都是一样的

	// 汇编中处理有符号和无符号，主要是下面两行
	// 一个是0扩展，一个是符号扩展
	movzbl -2(%rbp), %edx
	movsbl -1(%rbp), %eax
	movl %eax, %esi
	movl $.LC0, %edi
	movl $0, %eax
	call printf
	// 如果是int和unsigned int，因为不需要扩展，那么打印出来都是-1，需要用%u来打印无符号整数

	movl $0, %eax
	movq %rbp, %rsp
	popq %rbp
	ret
